This invention relates to dynamically updating code managed by an authorized agent, and more particularly to a method and system of updating code managed by an authorized agent without requiring agent processes or unauthorized processes to restart.
In a software product, which can have several active instances at the same time on a given system or set of systems, a centralized agent process is often used to manage the individual instances. This agent process may keep track of the individual instances, and might also provide some set of services to the instances. In a system comprised of authorized (trusted) and unauthorized (untrusted) code, the agent will often provide a set of authorized services to the unauthorized instances. In the case where the agent provides services to the instances, the instances will bind to the agent, possibly exchanging details about which services are provided by the agent and how they are accessed.
If a system administrator wants to apply service to the agent, the instances typically must be updated with any changes to the services provided by the new agent code. Often, the agent is stopped to apply service, and then restarted, requiring the instances to restart and bind to the new agent. As a result, the instances are not available for some time and an outage occurs. In a system requiring services to be available continuously, this outage is unacceptable, and an alternative way of updating the agent code is required.
In current systems, the agent code uses a lock to indicate that unauthorized instances should wait before accessing the agent. This allows the agent a chance to update, knowing that there can be no instances running the code at this time. This causes work to back up in the instances while they cannot use the agent, possibly resulting in error messages to the user and/or an unacceptable wait time.